﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace CC98.HtmlParser
{
	/// <summary>
	/// 为 HTML 文本提取提供帮助方法。该类型为静态类型。
	/// </summary>
	internal static class HtmlHelper
	{
		/// <summary>
		/// 将 HTML 内容进行正则表达式匹配。
		/// </summary>
		/// <param name="text">要匹配的 HTML 代码。</param>
		/// <param name="pattern">匹配使用的模式。</param>
		/// <returns>匹配结果。</returns>
		public static Match Match(this string text, string pattern)
		{
			// HTML 语言不区分区域性和大小写。
			return Regex.Match(text, pattern, RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture | RegexOptions.CultureInvariant | RegexOptions.Singleline);
		}

		/// <summary>
		/// 将 HTML 内容进行正则表达式匹配并获得所有结果。
		/// </summary>
		/// <param name="text">要匹配的 HTML 代码。</param>
		/// <param name="pattern">匹配使用的模式。</param>
		/// <returns>匹配结果。</returns>
		public static MatchCollection MatchAll(this string text, string pattern)
		{
			// HTML 语言不区分区域性和大小写。
			return Regex.Matches(text, pattern, RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture | RegexOptions.CultureInvariant | RegexOptions.Singleline);
		}

		/// <summary>
		/// 将 <see cref="System.String"/> 类型按照固定区域格式转换为 <see cref="System.Int32"/> 类型。
		/// </summary>
		/// <param name="text">要转换的文字。</param>
		/// <returns>转换后的结果。</returns>
		public static int ToInt32(this string text)
		{
			return Int32.Parse(text, CultureInfo.InvariantCulture);
		}

		/// <summary>
		/// 将 <see cref="System.String"/> 类型按照固定区域格式转换为 <see cref="System.DateTime"/> 类型。
		/// </summary>
		/// <param name="text">要转换的文字。</param>
		/// <returns>转换后的结果。</returns>
		public static DateTime ToDateTime(this string text)
		{
			return DateTime.Parse(text, CultureInfo.InvariantCulture);
		}

		/// <summary>
		/// 将 <see cref="System.String"/> 类型按照特定格式转换为 <see cref="System.DateTime"/> 类型。
		/// </summary>
		/// <param name="text">要转换的文字。</param>
		/// <returns>转换后的结果。</returns>
		public static DateTime ToDateTimeOfFormat(this string text, string format)
		{
			return DateTime.ParseExact(text, format, CultureInfo.InvariantCulture);
		}
	}
}
